package handler

import (
	"encoding/json"
	"fmt"
	"gin_maker_chat/client/utils"
	"gin_maker_chat/model"
	"net"
)

// 和服务器端保持通信
func KeepConnectClientAndServer(conn net.Conn) (err error) {

	//创建一个transfer实例，不停的读取服务器端的消息
	transfer := &utils.Transfer{
		Conn: conn,
	}
	for {
		fmt.Println("客户端正在等待读取服务器发起的消息......")
		msg, err := transfer.ReadMsgByNetCon()
		if err != nil {
			fmt.Println("transfer.ReadMsgByNetCon，err=", err)
			return err
		}
		//处理从服务器那边接收的消息
		fmt.Println("服务器端传来的消息，msg=", msg)
		switch msg.Type {
		case model.NotifyUserStatusMsgType:
			//有人上线了，需要处理
			//取出NotifyUserStatusMsg
			var notifyUserStatusMsg model.NotifyUserStatusMsg
			json.Unmarshal([]byte(msg.Data), &notifyUserStatusMsg)
			//同步上线用户列表
			UserMgr.UpdateUserOnlineStatus(&notifyUserStatusMsg)
		default:
			fmt.Println("客户端收到了服务端发送的未知消息类型")
		}
	}

}
